/*
  题目描述
    在魔法学院的神秘走廊里，教授们设下了许多考验。
    每个学生都需要通过这些考验才能毕业。
    在其中一次考验中，学生进入了一间充满魔法魔偶的房间，这些魔偶会攻击他们。
    学生和 m 个魔偶排成一行，并且学生在从左往右数的第 j 位。
    学生和魔偶各自拥有一个魔法值，学生只能驱散魔法值不高于他的魔偶。
    学生每次可以选择一个与他相邻的魔偶进行驱散。
    当驱散一个魔偶后，这个魔偶就会消失，与它相邻的魔偶会立即填补空位。
    同时，为了增加难度，当学生驱散了一个魔偶后，学生的魔法值将会变成被驱散的那个魔偶的魔法值。

    现在某学生想知道，是否存在一种方案能够驱散所有魔偶，顺利毕业。
  输入描述
    输入由多行数据构成。
    第一行是一个正整数 T，表示共有 T 组数据。
    对于每组数据，第一行两个正整数 m 和 j，用一个空格隔开，表示有 m 个魔偶，学生在从左往右数的第 j 位。
    第二行 m+1 个整数 bi，用一个空格隔开，bi 表示从左往右数的第 i 个生物（可能是魔偶或者学生）的魔法值。
  输出描述
    对于每组数据，如果存在一种方案能够驱散所有魔偶，顺利毕业，则输出"YES"，否则输出"NO"。
  样例1
    输入
      2
      3 2
      4 3 3 2
      4 1
      5 5 5 5 1
    输出
      NO
      YES
  提示
   【数据范围】
      保证 1 <= T <= 10，1 <= k <= m <= 2 * 10^5，1 <= bi <= 10^6。
*/

#include <iostream>

using namespace std;

int a[200005];
int T, m, k;

int main() {
    // 输入数据的组数
    cin >> T;

    while (T--) {
        // 输入魔偶数量以及学生的位置
        cin >> m;
        cin >> k;

        m++;
        for (int i = 1; i <= m; i++) {
            // 输入魔偶魔法值
            cin >> a[i];
        }

        bool flag = true;
        /*
          注意:
            a[k] ~ a[1] 这个方向上，相邻的 2 个元素对比时，如果逐渐递减，则能战胜这一侧的怪物；
            a[k] ~ a[m] 这个方向上，相邻的 2 个元素对比时，如果逐渐递减，则能战胜这一侧的怪物；
        */
        for (int i = k; i >= 2; i--) {
            if (a[i] < a[i - 1]) {
                // flag赋值为false
                flag = false;
            }
        }
        for (int i = k; i < m; i++) {
            if (a[i] < a[i + 1]) {
                // flag赋值为false
                flag = false;
            }
        }

        if (flag) {
            cout << "YES" << endl;
        } else {
            cout << "NO" << endl;
        }
    }

    return 0;
}